"use strict";
const path = require("path");
const defaultSettings = require("./src/settings.js");

function resolve(dir) {
	return path.join(__dirname, dir);
}

const name = defaultSettings.title || "分拣系统";
const port = process.env.port || process.env.npm_config_port || 8080; // dev port
const CompressionPlugin = require("compression-webpack-plugin");
module.exports = {
	publicPath:
		process.env.NODE_ENV == "production" ? "./storage/assets/cfj" : "./",
		outputDir: "../copartner/storage/app/public/assets/cfj",
	// outputDir: "fenjian",
	assetsDir: "static",
	lintOnSave: false,
	productionSourceMap: false,
	devServer: {
		port: port,
		open: false,
		overlay: {
			warnings: false,
			errors: true,
		},
		// 代理
		proxy: {
			// change xxx-api/login => mock/login
			[process.env.VUE_APP_BASE_API]: {
				// target: `http://scc.caidj.com/cfj`,
				// target: `http://lzx.caidj.net.cn/cfj`,
				target: `http://test.caidj.net.cn/cfj`,
				ws: true,
				changeOrigin: true,
				pathRewrite: {
					["^" + process.env.VUE_APP_BASE_API]: "",
				},
			},
		},
	},
	configureWebpack: {
		name: name,
		resolve: {
			alias: {
				"@": resolve("src"),
			},
		},
	},
	chainWebpack(config) {
		config.plugins.delete("preload");
		config.plugins.delete("prefetch");

		config.module
			.rule("vue")
			.use("vue-loader")
			.loader("vue-loader")
			.tap((options) => {
				options.compilerOptions.preserveWhitespace = true;
				return options;
			})
			.end();

		config.when(process.env.NODE_ENV === "development", (config) =>
			config.devtool("cheap-source-map")
		);

		config.when(process.env.NODE_ENV !== "development", (config) => {
			config.optimization.splitChunks({
				chunks: "all",
				cacheGroups: {
					libs: {
						name: "chunk-libs",
						test: /[\\/]node_modules[\\/]/,
						priority: 10,
						chunks: "initial",
					},
					elementUI: {
						name: "chunk-elementUI",
						priority: 20,
						test: /[\\/]node_modules[\\/]_?element-ui(.*)/,
					},
					commons: {
						name: "chunk-commons",
						test: resolve("src/components"), // can customize your rules
						minChunks: 3, //  minimum common number
						priority: 5,
						reuseExistingChunk: true,
					},
				},
			});
			config.optimization.runtimeChunk("single");
		});
	},
	pluginOptions: {
		CompressionPlugin: new CompressionPlugin({
			filename: "[path].gz[query]",
			algorithm: "gzip",
			test: /\.(js|css|html|svg)$/,
			threshold: 0,
			minRatio: 0.7,
			deleteOriginalAssets: true, // 删除原文件
		}),
	},
};
